﻿/***********************************************************************
 * CLR 版本: 4.0.30319.225
 * 工程名称: $projectname$
 * 命名空间: Toulr.Services
 * 文件名称: IGoodsService
 * 描    述: 提供商品信息维护 管理接口
 * 作    者: 18901309129@189.cn
 * 登录用户: hyyu
 * 创建时间: 2011-5-28 16:10:00
 * 创建年份: 2011
 * Update History: 
 ***********************************************************************/

using System.Collections.Generic;
using Toulr.Domains.Business;
using Toulr.Models;
using Toulr.Models.Enums;

namespace Toulr.Services
{
    /// <summary>
    /// IGoodsService 的摘要说明。
    /// </summary>
    public interface IGoodsService
    {
        #region 商品相关

        /// <summary>
        /// 添加商品
        /// </summary>
        /// <param name="goods"></param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<Goods> AddGoods(Goods goods);

        /// <summary>
        /// 修改商品信息
        /// </summary>
        /// <param name="goods"></param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<Goods> UpdateGoods(Goods goods);

        /// <summary>
        /// 删除商品信息
        /// </summary>
        /// <param name="goods"></param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<Goods> DeleteGoods(Goods goods);

        /// <summary>
        /// 删除商品信息
        /// </summary>
        /// <param name="goodsId"></param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<Goods> DeleteGoods(int goodsId);

        /// <summary>
        /// 获取全部商品列表
        /// </summary>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodss(IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取匹配商品名称或描述的全部商品列表
        /// </summary>
        /// <param name="goodsName">商品名称 为null时不考虑该条件</param>
        /// <param name="goodsDescription">商品描述 为null时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodss(string goodsName, string goodsDescription, IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取某一类商品列表
        /// </summary>
        /// <param name="infoCategoriesId">商品分类ID 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssBynfoCategoriesId(int infoCategoriesId, IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取某一店铺的商品列表
        /// </summary>
        /// <param name="shopId">店铺ID 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssByShop(int shopId, IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取原价在指定范围内的商品列表
        /// </summary>
        /// <param name="maxOriginalPrice">商品原价最大值(小于等于) 为-1时不考虑该条件 </param>
        /// <param name="minOriginalPrice">商品原价最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssByOriginalPrice(float maxOriginalPrice, float minOriginalPrice,
                                                            IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取折扣价在指定范围内的商品列表
        /// </summary>
        /// <param name="maxOfferPriceDiscount">商品折后价最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minOfferPriceDiscount">商品折后价最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssByOfferPriceDiscount(float maxOfferPriceDiscount,
                                                                 float minOfferPriceDiscount,
                                                                 IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取优惠价在指定范围内的商品列表
        /// </summary>
        /// <param name="maxConcessionsPrice">商品优惠价最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minConcessionsPrice">商品优惠价最大值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssByConcessionsPrice(float maxConcessionsPrice, float minConcessionsPrice,
                                                               IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取销售数量在指定范围内的商品列表
        /// </summary>
        /// <param name="maxSaleCount">商品销售数量最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minSaleCount">商品销售数量最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        ActionResult<IList<Goods>> GetGoodssBySaleCount(int maxSaleCount, int minSaleCount,
                                                        IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取得分值在指定范围内的商品列表
        /// </summary>
        /// <param name="maxScore">商品得分值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minScore">商品得分值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodssBymaxScore(int maxScore, int minScore,
                                                       IList<GoodsOrderType> lstGoodsOrderType);

        /// <summary>
        /// 获取指定条件的商品列表
        /// </summary>
        /// <param name="infoCategoriesId">商品分类ID 为-1时不考虑该条件</param>
        /// <param name="shopId">店铺ID 为-1时不考虑该条件</param>
        /// <param name="maxOriginalPrice">商品原价最大值(小于等于) 为-1时不考虑该条件 </param>
        /// <param name="minOriginalPrice">商品原价最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="maxOfferPriceDiscount">商品折后价最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minOfferPriceDiscount">商品折后价最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="maxConcessionsPrice">商品优惠价最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minConcessionsPrice">商品优惠价最大值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="maxSaleCount">商品销售数量最大值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minSaleCount">商品销售数量最小值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="maxScore">商品得分值(小于等于) 为-1时不考虑该条件</param>
        /// <param name="minScore">商品得分值(大于等于) 为-1时不考虑该条件</param>
        /// <param name="goodsName">商品名称 为null时不考虑该条件</param>
        /// <param name="goodsDescription">商品描述 为null时不考虑该条件</param>
        /// <param name="lstGoodsOrderType">指定一个或多个排序条件，为null时不考虑该条件</param>
        /// <returns></returns>
        /// hyyu 20110514
        ActionResult<IList<Goods>> GetGoodss(int infoCategoriesId, int shopId, float maxOriginalPrice,
                                             float minOriginalPrice, float maxOfferPriceDiscount,
                                             float minOfferPriceDiscount, float maxConcessionsPrice,
                                             float minConcessionsPrice, int maxSaleCount, int minSaleCount, int maxScore,
                                             int minScore, string goodsName, string goodsDescription,
                                             IList<GoodsOrderType> lstGoodsOrderType);


        #endregion
    }
}
